package com.corpgovernment.common.enums;

import com.ctrip.corp.obt.generic.utils.StringUtils;

/**
 * 电话国家码枚举
 */
public enum PhoneCountryCodeEnum {

    /**
     * 中国大陆+86
     */
    CN("CN", "中国大陆", "+86"),
    /**
     * 中国香港+852
     */
    HK("HK", "中国香港", "+852"),
    /**
     * 中国台湾+886
     */
    TW("TW", "中国台湾", "+886"),
    /**
     * 中国澳门+853
     */
    MO("MO", "中国澳门", "+853"),
    ;

    private String code;
    private String desc;
    private String countryCode;

    PhoneCountryCodeEnum(String code, String desc, String countryCode) {
        this.code = code;
        this.desc = desc;
        this.countryCode = countryCode;
    }

    public String getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }

    public String getCountryCode() {
        return countryCode;
    }

    /**
     * 根据 desc 查找枚举
     *
     * @param desc
     * @return
     */
    public static PhoneCountryCodeEnum getByDesc(String desc) {
        if (StringUtils.isEmpty(desc)) {
            return null;
        }
        for (PhoneCountryCodeEnum e : PhoneCountryCodeEnum.values()) {
            if (desc.equalsIgnoreCase(e.getDesc())) {
                return e;
            }
        }
        return null;
    }


    /**
     * 根据 desc 查找枚举
     *
     * @param countryCode
     * @return
     */
    public static PhoneCountryCodeEnum getByCountryCode(String countryCode) {
        if (StringUtils.isEmpty(countryCode)) {
            return null;
        }
        for (PhoneCountryCodeEnum e : PhoneCountryCodeEnum.values()) {
            if (countryCode.equalsIgnoreCase(e.getCountryCode())) {
                return e;
            }
        }
        return null;
    }

    /**
     * 根据 desc + countryCode 查找枚举
     * ex: 中国大陆+86
     * @param descCountryCode desc拼接countryCode
     * @return PhoneCountryCodeEnum
     */
    public static PhoneCountryCodeEnum getByDescAndCountryCode(String descCountryCode) {
        if (StringUtils.isEmpty(descCountryCode)) {
            return null;
        }
        for (PhoneCountryCodeEnum e : PhoneCountryCodeEnum.values()) {
            if (descCountryCode.equalsIgnoreCase(e.getDesc() + e.getCountryCode())) {
                return e;
            }
        }
        return null;
    }
}
